<%
/**
* 描述：输出值。
* @param  mix  $value
* @return void
*/
function print($value)
{
	Response.Write($value);
}

/**
* 描述：输出值。
* @param  mix  $value
* @return void
*/
function echo($value)
{
	Response.Write($value);
}

/**
* 描述：输出值并输出html的br换行。
* @param  mix  $value
* @return void
*/
function printbr($value)
{
	Response.Write($value);
	Response.Write('<br/>');	
}

/**
* 描述：输出值并输出\n换行。
* @param  mix  $value
* @return void
*/
function println($value)
{
	Response.Write($value);
	Response.Write('\n');
}

/**
* 描述：输出值并结束脚本执行。
* @param  mix  $value
* @return void
*/
function exit($value)
{
	Response.Write($value);
	Response.End();
}

/**
* 描述：获取http.get类型参数。
* @param  string $name
* @return mix
*/
function get($name)
{ 
	return Request.QueryString($name);
}

/**
* 描述：获取http.post类型参数。
* @param  string $name
* @return mix
*/
function post($name)
{
	return Request.Form($name);
}

/**
* 描述：获取http参数。
* @param  string $name
* @return mix
*/
function request($name)
{ 
	return Request($name);
}	

/**
* 描述：解析GET参数到JSON。
* @param string $queryString 问号后台的参数
* @param string $isLowerCase JSON对象的参数名是否全部小写
*/
function parseGetToJSON($queryString,$isLowerCase)
{
	var tempArray=queryString.split('&')||Request.QueryString.item;
	var tempJson={};
	for(var iArr=0;iArr<tempArray.length;iArr++)
	{
		var tempDic=tempArray[iArr].split('=');
		var perName=tempDic[0];
			if($isLowerCase){
				perName=perName.toLowerCase()
			}
		var perValue=tempDic[1];
		if(perName in tempJson) 
			tempJson[perName]=(tempJson[perName]+','+perValue);
		else 
			tempJson[perName]=perValue;			
	}
	tempArray=null;
	return tempJson;
}

/**
* 描述：解析POST参数到JSON。
* @param string $queryString 问号后台的参数
* @param string $isLowerCase JSON对象的参数名是否全部小写
*/	
function parsePostToJSON($isLowerCase)
{
	var tempJson={};	
	var params = new Enumerator(Request.Form); 
	while (!params.atEnd()) 
	{ 
		var tempName=params.item();
			if(tempName){
				tempName=tempName.toLowerCase();
			}
		if(tempName in tempJson)
			tempJson[tempName]=(tempJson[tempName]+Request.Form(tempName));
		else
			tempJson[tempName]=Request.Form(tempName);
		params.moveNext(); 
	} 
	return tempJson;
}	

/**
* 描述：解析二进制POST参数到JSON。
* @param  string $isLowerCase JSON对象的参数名是否全部小写
* @return object              根据post参数名解析成的JSON对象
*/	
function parseBinaryPostToJSON($isLowerCase)
{
	if(Request.ServerVariables('Request_Method')!='POST') 
		printASPError(Request.ServerVariables("SCRIPT_NAME")+' parseBinaryForm()函数错误','该HTTP请求类型不是POST。');
	if(Request.ServerVariables('Content_Type').item.indexOf('multipart/form-data')==-1) 
		printASPError(Request.ServerVariables("SCRIPT_NAME")+' parseBinaryForm()函数错误','该HTTP请求类型是POST，但表单的enctype属性设置并不是multipart/form-data，请将表单enctype设置成multipart/form-data。');
	//声明要用的对象及变量
	var tempJson={};
	var globalStream=Server.CreateObject('ADODB.Stream');
		globalStream.Open(),globalStream.type=1;			
	var tempStream=Server.CreateObject('ADODB.Stream');
	var binaryData='',limitSign='';
	//读取二进制数据
	var totalBytes=Request.TotalBytes,chunk=1000*200;
		while(totalBytes>chunk)
		{
			globalStream.write(Request.BinaryRead(chunk));
			totalBytes-=chunk;
		}			
		if(totalBytes>0) globalStream.write(Request.BinaryRead(totalBytes));			
		globalStream.position=0,globalStream.type=2,globalStream.charset="ascii";
		if(!globalStream.EOS) binaryData=globalStream.readText(-1); 
		globalStream.position=0,globalStream.type=1;
		
		var limitStartPosition=binaryData.indexOf("--");
			limitStartPosition+=2;				
		var limitEndPosition=binaryData.indexOf("\r\n",limitStartPosition);
			limitSign=binaryData.substring(limitStartPosition,limitEndPosition);	
		
	//解析表单数据var formElementName,filePath,fileName,fileExt,fileSize;
	var binaryStart,binaryFinish,binaryPosition3;		
		binaryStart=binaryData.indexOf(limitSign);				
		while(binaryStart!=-1)						
		{
			//查找位置
			binaryStart+=limitSign.length+2;
			binaryFinish=binaryData.indexOf(limitSign,binaryStart);				
			if(binaryFinish==-1) break;
			binaryPosition3=binaryData.indexOf("\r\n\r\n",binaryStart);				//寻找报头的结束位置
			if(binaryPosition3==-1||binaryPosition3>binaryFinish) break;
			binaryPosition3+=4;
			
			var headText=binaryToString(binaryStart,binaryPosition3-binaryStart);	//获取报头字符串	
			var elementName=headText.match(/\sname=\"(.+?)\"/);	
				if(elementName==null) break;										//寻找name属性位置					
				elementName=String(elementName[1]);
				if($isLowerCase){
					elementName=elementName.toLowerCase();					
				}
			var fileName=headText.match(/\sfilename=\"(.+?)\"/);					//寻找filename属性位置
			var isFilearea=(fileName==null ? false:true);									
			//存取表单
			if(isFilearea)															
			{		
				fileName=fileName[1];
				var fileExt=fileName.match(/\.(\w+)$/);
					fileExt=fileExt[1];						
					if($isLowerCase){
						fileExt=fileExt.toLowerCase();
					}
				var fileSize=(binaryFinish-binaryPosition3-4);	
				createJson_File(elementName,fileName,fileExt,binaryPosition3,fileSize);
			}
			else{							
				createJson_Other(elementName,binaryPosition3,binaryFinish-binaryPosition3-4);
			}
			binaryStart=binaryFinish;															
		}
		
		function createJson_File($name,$oriFilename,$oriFileext,$position,$fileSize,$isImage,$imageWidth,$imageHeight)
		{
			if($name in tempJson){
				printASPError(Request.ServerVariables("SCRIPT_NAME")+' parseBinaryForm()函数错误','表单中有与'+$name+'文件域相同名称的文件域或其它HTML控件，倒至命名冲突。请使用与'+$name+'文件域不同的名称进行命名。');
				tempJson=null;
			}
			tempJson[$name]=
			{
				fileName:$oriFilename,fileExtname:$oriFileext,size:$fileSize,					
				save:function(_$fileName)
				{
					tempStream.type=1;
					tempStream.Open();			
					globalStream.position=$position;
					globalStream.copyTo(tempStream,$fileSize);				
					tempStream.saveToFile(_$fileName,2);
					tempStream.Close();
				},
				isTrueImage:function()
				{
					var isImage=false;							
						tempStream.Open();
						tempStream.type=1;
						globalStream.position=$position;
						globalStream.copyTo(tempStream,$fileSize);				
						tempStream.position=0;
						tempStream.type=2;								
						tempStream.charset="UTF-16BE";
					var arr=stringToBytes(tempStream.readText(12));
					
						if (arr[0] == 0x47 && arr[1] == 0x49 && arr[2] == 0x46){						//gif
							isImage=true;			
						}
						else if (arr[6] == 0x4A && arr[7] == 0x46 && arr[8] == 0x49 && arr[9] == 0x46){	//jpg		
							isImage=true;
						}				
						else if (arr[1] == 0x50 && arr[2] == 0x4E && arr[3] == 0x47){					//png		
							isImage=true;
						}
						else if(arr[0] == 0x42 && arr[1] == 0x4D){										//bmp		
							isImage=true;
						}	
						tempStream.Close();
					return isImage;					
				},
				getWidthHeight:function()
				{
					var widthHeight={width:0,height:0};	
						tempStream.Open();							
						tempStream.type=1;
						globalStream.position=$position;
						globalStream.copyTo(tempStream,$fileSize);				
						tempStream.position=0;
						tempStream.type=2;								
						tempStream.charset="UTF-16BE";				
					var arr=stringToBytes(tempStream.readText(12));
				
						if (arr[0] == 0x47 && arr[1] == 0x49 && arr[2] == 0x46)		//gif
						{
							widthHeight.width = arr[7] << 8|arr[6];
							widthHeight.height = arr[9] << 8|arr[8];					
						}
						else if (arr[6] == 0x4A && arr[7] == 0x46 && arr[8] == 0x49 && arr[9] == 0x46)		//jpg
						{
							tempStream.position = 3;
							arr = stringToBytes(tempStream.readText(-1));
							var i = 0, k = 0, j = 0;
							while (true)
							{
								while ((i = arr[j++]) == 255);
								if (j > arr.length) break;
								if (i > 191 && i < 196) break;
								k = (arr[j++]) << 8|arr[j++];
								if ((j += k - 2) > arr.length) break;
								while ((i = arr[j++]) < 255);
								if (j > arr.length) break;
							}
							j += 3;
							if (j + 4 < arr.length)
							{
								widthHeight.height = (arr[j++] << 8)|arr[j++];
								widthHeight.width = (arr[j++] << 8)|arr[j++];
							}
						}				
						else if (arr[1] == 0x50 && arr[2] == 0x4E && arr[3] == 0x47)	//png
						{
							widthHeight.width = arr[18] << 8|arr[19];
							widthHeight.height = arr[22] << 8|arr[23];
						}
						else if(arr[0] == 0x42 && arr[1] == 0x4D)	//bmp
						{
							widthHeight.width = arr[19] << 8|arr[18];
							widthHeight.height = arr[23] << 8|arr[22];
						}	
						tempStream.Close();
					return widthHeight;								
				}
			};
		}
		
		function createJson_Other($name,$position,$length)
		{
			var formElementValue=binaryToString($position,$length);
				if($name in tempJson) 
				{
					tempJson[$name]=(tempJson[$name]+','+formElementValue);
					tempJson['$_'+$name+'_array'].push(formElementValue);
				}
				else 
				{
					tempJson[$name]=formElementValue;
					tempJson['$_'+$name+'_array']=[formElementValue];
				}
		}
					
		function binaryToString($position,$length)
		{
			tempStream.type=1;
			tempStream.Open();			
			globalStream.position=$position;
			globalStream.copyTo(tempStream,$length);				
			tempStream.position=0;
			tempStream.type=2;
			tempStream.charset='UTF-8';
			
			var tempText=tempStream.readText(-1);
			tempStream.Close();
			tempText=tempText.replace(/\u0000/g,'');
			return tempText;		
		}				
	return tempJson;
}

/**
* 描述：输出JS.alert代码。
* @param  string $str 显示的文本
* @return void
*/
function jsAlert($str)
{
	Response.Write('<script type="text/javascript">alert("'+$str+'");</script>');
}

/**
* 描述：输出JS.location代码。
* @param  string $url                        URL地址
* @param  string $target(_self|_parent|_top) 找开目标
* @return void
*/
function jsLocation($url,$target)
{
	if($target=='_self')
		Response.Write('<script type="text/javascript">window.location="'+$url+'";</script>');
	else if($target=='_parent')
		Response.Write('<script type="text/javascript">parent.window.location="'+$url+'";</script>');
	else if($target=='_top')
		Response.Write('<script type="text/javascript">window.top.location="'+$url+'";</script>');
	else
		Response.Write('<script type="text/javascript">window.location="'+$url+'";</script>');
}

/**
* 描述：输出JS.history.go代码。
* @param  number $step 参数步数
* @return void
*/
function jsHistory($step)
{
	Response.Write('<script type="text/javascript">window.history.go("'+$step+'");</script>');
}


/**
* 描述：删除文件。
* @param  string $path 路径 
* @return boolean	   是否删除文件
*/
function deleteFile($path)
{
	var tempBool=false;
	var fso=Server.CreateObject('Scripting.FileSystemObject');
		try{
			tempBool=fso.deleteFile($path);
		}catch(e){}			
		fso=null;
	return tempBool;
}
	
/**
* 描述：删除文件夹。
* @param  string $path 路径 
* @return boolean	   是否删除了文件夹
*/	
function deleteFolder($path)
{
	var tempBool=false;
	var fso=Server.CreateObject('Scripting.FileSystemObject');
		try{
			tempBool=fso.deleteFolder($path);
		}catch(e){}			
		fso=null;
	return tempBool;
}	
	
/**
* 描述：获取文件对象。
* @param  string $path 路径 
* @return object	   文件对象
*/		
function getFile($path)
{
	var tempObject=null;
	var fso=Server.CreateObject('Scripting.FileSystemObject');
		try{
			tempObject=fso.getFile($path);
		}catch(e){}			
		fso=null;
	return tempObject;
}	
		
/**
* 描述：自动创建文件路径。
* @param  string $path 路径 
* @return void
*/
function folderRobot($path)
{
	var folder=$path.replace(/\//g,'\\').split('\\');
	var fso_temp=Server.CreateObject('Scripting.FileSystemObject')
		var temp='';
		for(var ifolder=0;ifolder<folder.length;ifolder++)
		{
			temp+=folder[ifolder]+'\\';
			if(ifolder>0){
				try
				{
					var tempFolder=temp.substr(0,temp.length-1);
								printbr(tempFolder);
					if(!fso_temp.FolderExists(temp.substr(0,temp.length-1))) 
						fso_temp.CreateFolder(tempFolder);
					//Response.Write(temp.substr(0,temp.length-1))
				}catch(e){}
			}
		}
		fso_temp=null;		
}
	
/**
* 描述：根据文件大小转换成人可读的书面形式。
* @param  number $bytes 文件大小
* @param  string $unit  要转换的单位
* @return void
*/
function fileSize($bytes,$unit)
{
	$bytes=parseInt($bytes);
	if($bytes<=0||isNaN($bytes)) return 0;
	
	switch($unit)
	{
		case 'b':
			return $bytes+$unit;
			break;		
		case 'k':
			return $bytes/1024+$unit;
			break;
		case 'm':
			return $bytes/1024/1024+$unit;
			break;						
		default:
			if($bytes<1024)
				return $bytes+'b';
			else if($bytes>=1024&&$bytes<1024*1024)
				return parseInt($bytes/1024)+'k';
			else
				return ($bytes/1024/1024).toFixed(2)+'m';							
	}			
}

/**
* 描述：获取文本文件内容。
* @param  string $path    路径 
* @param  string $charset 编码
* @return string		  文件内容或NULL
*/
function getFileText($path,$charset)
{
	var fso=Server.CreateObject('Scripting.FileSystemObject');
		if(fso.FileExists($path)==false){
			fso=null;	
			return;
		}
		fso=null;
	var tempText;		
	var tempStream=Server.CreateObject('ADODB.Stream');
		tempStream.Type=2;
		tempStream.Charset=($charset||'UTF-8');
		tempStream.Open();				
		tempStream.LoadFromFile($path);
		tempText=tempStream.ReadText(-1);
		tempStream.Close(),tempStream=null;
	return tempText;
}
	
/**
* 描述：存储文本文件。
* @param  string $path    路径 
* @param  string $content 内容
* @param  string $charset 编码
* @return boolean         是否存储成功
*/
function saveToFile($path,$content,$charset)
{	
	var tempStream=Server.CreateObject('ADODB.Stream');
		tempStream.type=2;
		tempStream.Open();		
		tempStream.charset=($charset||'UTF-8');
		tempStream.writeText($content);			
	var isSave=tempStream.saveToFile($path,2);
		tempStream.Close();		
	return isSave;	
}

/**
* 描述：检测文件是否存在。
* @param  string $path    路径 
* @return boolean         是否存在文件
*/
function fileExists($path)
{
	var tempBool=false;
	var fso=Server.CreateObject("Scripting.FileSystemObject");
		tempBool=fso.FileExists($path);
		fso=null
	return tempBool;
}
%>